home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2005 June (DVD) / DPPRO0605DVD.iso / Install / program files / Borland / BDS / 3.0 / Demos / Delphi.Net / CLR / CultureInfo / BrowserMain.pas next >
Encoding:
Pascal/Delphi Source File  |  2004-10-22  |  11.0 KB  |  309 lines

  1. unit BrowserMain;
  2.  
  3. interface
  4.  
  5. uses
  6.   System.Drawing, System.Collections, System.ComponentModel, System.Globalization,
  7.   System.Windows.Forms, System.Data, System.Threading;
  8.  
  9. type
  10.   TMainForm = class(System.Windows.Forms.Form)
  11.   {$REGION 'Designer Managed Code'}
  12.   strict private
  13.     /// <summary>
  14.     /// Required designer variable.
  15.     /// </summary>
  16.     Components: System.ComponentModel.Container;
  17.     ListViewCulture: System.Windows.Forms.ListView;
  18.     PropertyGridDetail: System.Windows.Forms.PropertyGrid;
  19.     ColumnHeader1: System.Windows.Forms.ColumnHeader;
  20.     ColumnHeader2: System.Windows.Forms.ColumnHeader;
  21.     ColumnHeader3: System.Windows.Forms.ColumnHeader;
  22.     ComboBoxCultureType: System.Windows.Forms.ComboBox;
  23.     GroupBoxList: System.Windows.Forms.GroupBox;
  24.     GroupBoxDetails: System.Windows.Forms.GroupBox;
  25.     ColumnHeader4: System.Windows.Forms.ColumnHeader;
  26.     /// <summary>
  27.     /// Required method for Designer support - do not modify
  28.     /// the contents of this method with the code editor.
  29.     /// </summary>
  30.     procedure InitializeComponent;
  31.     procedure TMainForm_Load(sender: System.Object; e: System.EventArgs);
  32.     procedure ListViewCulture_SelectedIndexChanged(sender: System.Object; e: System.EventArgs);
  33.     procedure ComboBoxCultureType_SelectedIndexChanged(sender: System.Object;
  34.         e: System.EventArgs);
  35.     procedure ListViewCulture_ColumnClick(sender: System.Object; e: System.Windows.Forms.ColumnClickEventArgs);
  36.   {$ENDREGION}
  37.   strict protected
  38.     /// <summary>
  39.     /// Clean up any resources being used.
  40.     /// </summary>
  41.     procedure Dispose(Disposing: Boolean); override;
  42.   public
  43.     constructor Create;
  44.     procedure PopulateComboBox;
  45.     procedure PopulateListView;
  46.   private
  47.     type
  48.       TCultureListViewItem = class(ListViewItem)
  49.       private
  50.         FCulture: CultureInfo;
  51.       public
  52.         constructor Create(ACulture: CultureInfo);
  53.         property Culture: CultureInfo read FCulture write FCulture;
  54.       end;
  55.  
  56.       TListViewItemSorter = class(TInterfacedObject, IComparer)
  57.       private
  58.         FColumn: Integer;
  59.         FDesceding: Boolean;
  60.         procedure SetColumn(Value: Integer);
  61.       public
  62.         function Compare(x: &Object; y: &Object): Integer;
  63.         property Column: Integer read FColumn write SetColumn;
  64.       end;
  65.   private
  66.     FSorter: TMainForm.TListViewItemSorter;
  67.   end;
  68.  
  69. implementation
  70.  
  71. { TMainForm.TCultureListViewItem }
  72.  
  73. constructor TMainForm.TCultureListViewItem.Create(ACulture: CultureInfo);
  74. begin
  75.   inherited Create;
  76.   FCulture := ACulture;
  77.   Text := Culture.Name;
  78.   SubItems.Add(Culture.DisplayName);
  79.   SubItems.Add(Culture.EnglishName);
  80.   SubItems.Add(Culture.NativeName);
  81. end;
  82.  
  83. { TMainForm.TListViewItemSorter }
  84.  
  85. function TMainForm.TListViewItemSorter.Compare(x: &Object; y: &Object): Integer;
  86. begin
  87.   Result := System.String.Compare(ListViewItem(x).SubItems[FColumn].Text, ListViewItem(y).SubItems[FColumn].Text);
  88.   if FDesceding then
  89.     Result := -Result;
  90. end;
  91.  
  92. procedure TMainForm.TListViewItemSorter.SetColumn(Value: Integer);
  93. begin
  94.   if FColumn = Value then
  95.     FDesceding := not FDesceding
  96.   else
  97.   begin
  98.     FDesceding := False;
  99.     FColumn := Value;
  100.   end;
  101. end;
  102.  
  103. {$REGION 'Windows Form Designer generated code'}
  104. /// <summary>
  105. /// Required method for Designer support - do not modify
  106. /// the contents of this method with the code editor.
  107. /// </summary>
  108. procedure TMainForm.InitializeComponent;
  109. begin
  110.   Self.PropertyGridDetail := System.Windows.Forms.PropertyGrid.Create;
  111.   Self.GroupBoxList := System.Windows.Forms.GroupBox.Create;
  112.   Self.ComboBoxCultureType := System.Windows.Forms.ComboBox.Create;
  113.   Self.ListViewCulture := System.Windows.Forms.ListView.Create;
  114.   Self.ColumnHeader1 := System.Windows.Forms.ColumnHeader.Create;
  115.   Self.ColumnHeader2 := System.Windows.Forms.ColumnHeader.Create;
  116.   Self.ColumnHeader3 := System.Windows.Forms.ColumnHeader.Create;
  117.   Self.ColumnHeader4 := System.Windows.Forms.ColumnHeader.Create;
  118.   Self.GroupBoxDetails := System.Windows.Forms.GroupBox.Create;
  119.   Self.GroupBoxList.SuspendLayout;
  120.   Self.GroupBoxDetails.SuspendLayout;
  121.   Self.SuspendLayout;
  122.   // 
  123.   // PropertyGridDetail
  124.   // 
  125.   Self.PropertyGridDetail.Anchor := (System.Windows.Forms.AnchorStyles((((System.Windows.Forms.AnchorStyles.Top 
  126.       or System.Windows.Forms.AnchorStyles.Bottom) or System.Windows.Forms.AnchorStyles.Left) 
  127.       or System.Windows.Forms.AnchorStyles.Right)));
  128.   Self.PropertyGridDetail.CommandsVisibleIfAvailable := True;
  129.   Self.PropertyGridDetail.HelpVisible := False;
  130.   Self.PropertyGridDetail.LargeButtons := False;
  131.   Self.PropertyGridDetail.LineColor := System.Drawing.SystemColors.ScrollBar;
  132.   Self.PropertyGridDetail.Location := System.Drawing.Point.Create(8, 16);
  133.   Self.PropertyGridDetail.Name := 'PropertyGridDetail';
  134.   Self.PropertyGridDetail.PropertySort := System.Windows.Forms.PropertySort.Alphabetical;
  135.   Self.PropertyGridDetail.Size := System.Drawing.Size.Create(696, 256);
  136.   Self.PropertyGridDetail.TabIndex := 1;
  137.   Self.PropertyGridDetail.Text := 'Detail';
  138.   Self.PropertyGridDetail.ToolbarVisible := False;
  139.   Self.PropertyGridDetail.ViewBackColor := System.Drawing.SystemColors.Window;
  140.   Self.PropertyGridDetail.ViewForeColor := System.Drawing.SystemColors.WindowText;
  141.   // 
  142.   // GroupBoxList
  143.   // 
  144.   Self.GroupBoxList.Anchor := (System.Windows.Forms.AnchorStyles((((System.Windows.Forms.AnchorStyles.Top 
  145.       or System.Windows.Forms.AnchorStyles.Bottom) or System.Windows.Forms.AnchorStyles.Left) 
  146.       or System.Windows.Forms.AnchorStyles.Right)));
  147.   Self.GroupBoxList.Controls.Add(Self.ComboBoxCultureType);
  148.   Self.GroupBoxList.Controls.Add(Self.ListViewCulture);
  149.   Self.GroupBoxList.Location := System.Drawing.Point.Create(8, 8);
  150.   Self.GroupBoxList.Name := 'GroupBoxList';
  151.   Self.GroupBoxList.Size := System.Drawing.Size.Create(712, 376);
  152.   Self.GroupBoxList.TabIndex := 4;
  153.   Self.GroupBoxList.TabStop := False;
  154.   Self.GroupBoxList.Text := '&List';
  155.   // 
  156.   // ComboBoxCultureType
  157.   // 
  158.   Self.ComboBoxCultureType.DropDownStyle := System.Windows.Forms.ComboBoxStyle.DropDownList;
  159.   Self.ComboBoxCultureType.Location := System.Drawing.Point.Create(8, 16);
  160.   Self.ComboBoxCultureType.Name := 'ComboBoxCultureType';
  161.   Self.ComboBoxCultureType.Size := System.Drawing.Size.Create(232, 21);
  162.   Self.ComboBoxCultureType.TabIndex := 5;
  163.   Include(Self.ComboBoxCultureType.SelectedIndexChanged, Self.ComboBoxCultureType_SelectedIndexChanged);
  164.   // 
  165.   // ListViewCulture
  166.   // 
  167.   Self.ListViewCulture.Anchor := (System.Windows.Forms.AnchorStyles((((System.Windows.Forms.AnchorStyles.Top 
  168.       or System.Windows.Forms.AnchorStyles.Bottom) or System.Windows.Forms.AnchorStyles.Left) 
  169.       or System.Windows.Forms.AnchorStyles.Right)));
  170.   Self.ListViewCulture.Columns.AddRange([Self.ColumnHeader1, Self.ColumnHeader2, Self.ColumnHeader3, Self.ColumnHeader4]);
  171.   Self.ListViewCulture.FullRowSelect := True;
  172.   Self.ListViewCulture.GridLines := True;
  173.   Self.ListViewCulture.Location := System.Drawing.Point.Create(8, 48);
  174.   Self.ListViewCulture.Name := 'ListViewCulture';
  175.   Self.ListViewCulture.Size := System.Drawing.Size.Create(696, 320);
  176.   Self.ListViewCulture.TabIndex := 4;
  177.   Self.ListViewCulture.View := System.Windows.Forms.View.Details;
  178.   Include(Self.ListViewCulture.ColumnClick, Self.ListViewCulture_ColumnClick);
  179.   Include(Self.ListViewCulture.SelectedIndexChanged, Self.ListViewCulture_SelectedIndexChanged);
  180.   // 
  181.   // ColumnHeader1
  182.   // 
  183.   Self.ColumnHeader1.Text := 'Culture';
  184.   // 
  185.   // ColumnHeader2
  186.   // 
  187.   Self.ColumnHeader2.Text := 'Display name';
  188.   Self.ColumnHeader2.Width := 200;
  189.   // 
  190.   // ColumnHeader3
  191.   // 
  192.   Self.ColumnHeader3.Text := 'English name';
  193.   Self.ColumnHeader3.Width := 200;
  194.   // 
  195.   // ColumnHeader4
  196.   // 
  197.   Self.ColumnHeader4.Text := 'Native name';
  198.   Self.ColumnHeader4.Width := 200;
  199.   // 
  200.   // GroupBoxDetails
  201.   // 
  202.   Self.GroupBoxDetails.Anchor := (System.Windows.Forms.AnchorStyles(((System.Windows.Forms.AnchorStyles.Bottom 
  203.       or System.Windows.Forms.AnchorStyles.Left) or System.Windows.Forms.AnchorStyles.Right)));
  204.   Self.GroupBoxDetails.Controls.Add(Self.PropertyGridDetail);
  205.   Self.GroupBoxDetails.Location := System.Drawing.Point.Create(8, 392);
  206.   Self.GroupBoxDetails.Name := 'GroupBoxDetails';
  207.   Self.GroupBoxDetails.Size := System.Drawing.Size.Create(712, 280);
  208.   Self.GroupBoxDetails.TabIndex := 5;
  209.   Self.GroupBoxDetails.TabStop := False;
  210.   Self.GroupBoxDetails.Text := '&Details';
  211.   // 
  212.   // TMainForm
  213.   // 
  214.   Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 13);
  215.   Self.ClientSize := System.Drawing.Size.Create(728, 685);
  216.   Self.Controls.Add(Self.GroupBoxDetails);
  217.   Self.Controls.Add(Self.GroupBoxList);
  218.   Self.Name := 'TMainForm';
  219.   Self.Text := 'CultureInfo browser';
  220.   Include(Self.Load, Self.TMainForm_Load);
  221.   Self.GroupBoxList.ResumeLayout(False);
  222.   Self.GroupBoxDetails.ResumeLayout(False);
  223.   Self.ResumeLayout(False);
  224. end;
  225. {$ENDREGION}
  226.  
  227. procedure TMainForm.Dispose(Disposing: Boolean);
  228. begin
  229.   if Disposing then
  230.   begin
  231.     if Components <> nil then
  232.       Components.Dispose();
  233.   end;
  234.   inherited Dispose(Disposing);
  235. end;
  236.  
  237. constructor TMainForm.Create;
  238. begin
  239.   inherited Create;
  240.   //
  241.   // Required for Windows Form Designer support
  242.   //
  243.   InitializeComponent;
  244.   //
  245.   // TODO: Add any constructor code after InitializeComponent call
  246.   //
  247.   FSorter := TMainForm.TListViewItemSorter.Create;
  248.   ListViewCulture.ListViewItemSorter := FSorter;
  249. end;
  250.  
  251. procedure TMainForm.PopulateComboBox;
  252. var
  253.   C: CultureTypes;
  254. begin
  255.   ComboBoxCultureType.Items.Clear;
  256.   for C := Low(CultureTypes) to High(CultureTypes) do
  257.     ComboBoxCultureType.Items.Add(&Object(C));
  258.   ComboBoxCultureType.SelectedIndex := 0;
  259. end;
  260.  
  261. procedure TMainForm.PopulateListView;
  262. var
  263.   I: Integer;
  264.   List: array of CultureInfo;
  265. begin
  266.   ListViewCulture.BeginUpdate;
  267.   try
  268.     ListViewCulture.Items.Clear;
  269.     List := CultureInfo.GetCultures(CultureTypes(ComboBoxCultureType.SelectedItem));
  270.     for I := 0 to Length(List) - 1 do
  271.       if List[I].Name <> '' then
  272.         ListViewCulture.Items.Add(TCultureListViewItem.Create(List[I]));
  273.     ListViewCulture.Sort;
  274.     if ListViewCulture.Items.Count > 0 then
  275.     begin
  276.       ListViewCulture.Items[0].Focused := True;
  277.       ListViewCulture.Items[0].Selected := True;
  278.       ListViewCulture_SelectedIndexChanged(nil, nil);
  279.     end;
  280.   finally
  281.     ListViewCulture.EndUpdate;
  282.   end;
  283. end;
  284.  
  285. procedure TMainForm.ListViewCulture_ColumnClick(sender: System.Object; e: System.Windows.Forms.ColumnClickEventArgs);
  286. begin
  287.   FSorter.Column := e.Column;
  288.   ListViewCulture.Sort;
  289. end;
  290.  
  291. procedure TMainForm.ComboBoxCultureType_SelectedIndexChanged(sender: System.Object;
  292.     e: System.EventArgs);
  293. begin
  294.   PopulateListView;
  295. end;
  296.  
  297. procedure TMainForm.ListViewCulture_SelectedIndexChanged(sender: System.Object;
  298.     e: System.EventArgs);
  299. begin
  300.   PropertyGridDetail.SelectedObject := (ListViewCulture.FocusedItem as TCultureListViewItem).Culture;
  301. end;
  302.  
  303. procedure TMainForm.TMainForm_Load(sender: System.Object; e: System.EventArgs);
  304. begin
  305.   PopulateComboBox;
  306. end;
  307.  
  308. end.
  309.